//package com.lagou.controller;
//
//import com.lagou.entity.GoodDetail;
//import com.lagou.entity.OrderDetail;
//import com.lagou.repository.GoodRepository;
//import com.lagou.service.IGoodService;
//import com.lagou.service.IOrderService;
//import com.lagou.service.IRedisService;
//import com.lagou.service.IRocketService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.client.producer.SendResult;
//import org.apache.rocketmq.client.producer.SendStatus;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.ModelMap;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.*;
//
//@Controller
//@Slf4j
//public class SeckillController {
//
//    @Autowired
//    private IGoodService goodService;
//
//    @Autowired
//    private IRedisService redisService;
//    @Autowired
//    private IRocketService rocketService;
//    @Autowired
//    private IOrderService orderService;
//
//    /** 秒杀列表 */
//    @GetMapping("/list")
//    public String list(ModelMap modelMap) {
//        final List<GoodDetail> list = goodService.findAll();
//        modelMap.put("list", list);
//        return "list";
//    }
//
//    /** 秒杀详情页 */
//    @GetMapping("/detail/{id}")
//    public String detail(@PathVariable Integer id, ModelMap modelMap) {
//        final Optional<GoodDetail> detailOptional = goodService.findById(id);
//        final GoodDetail goodDetail = detailOptional.get();
//        modelMap.put("id", id);
//        modelMap.put("name", goodDetail.getName());
//        long startTime = goodDetail.getStartTime().getTime() / 1000; // 秒
//        long currentTime = System.currentTimeMillis() / 1000; // 秒
//        Long sub = startTime - currentTime;
//        modelMap.put("subTime", sub);
//        return "detail";
//    }
//
//    /** 秒杀过程 */
//    @PostMapping("/seckill/{goodId}")
//    @ResponseBody
//    public Map<String,Object> seckil(@PathVariable Integer goodId, @RequestBody Map<String,Object> paramMap) {
//        Map<String,Object> resultMap = new HashMap<>();
//        resultMap.put("code", "200");
//        log.info("goodId:{} paramMap:{}", goodId, paramMap);
//        String randomStr = (String)paramMap.get("randomStr");
//        String userId = (String)paramMap.get("userId");
//        String randomStrRedis =  redisService.getRandom(goodId);
//        if(!Objects.equals(randomStr, randomStrRedis)) {
//            resultMap.put("msg", "失败,随机数验证失败!");
//            return resultMap;
//        }
//        Boolean hasKey = redisService.hasKey(goodId);
//        log.info("hasKey:{}", hasKey);
//        if (hasKey != null && !hasKey) {
//            Optional<GoodDetail> optional = goodService.findById(goodId);
//            optional.ifPresent(goodDetail -> redisService.setGoodNumber(goodId, goodDetail.getNumber()));
//        }
//        Integer goodNumber = redisService.getGoodNumber(goodId);
//        log.info("库存 goodNumber:{}", goodNumber);
//        if(goodNumber == null) {
//            resultMap.put("msg", "失败，没有该商品");
//            return resultMap;
//        }
//        if(goodNumber < 0) {
//            resultMap.put("msg", "失败，秒杀结束，没有库存");
//            return resultMap;
//        }
//
//        OrderDetail orderDetail= orderService.save(goodId, userId);
//        SendResult sendResult = rocketService.syncSend(String.valueOf(orderDetail.getId()));
//        if(sendResult.getSendStatus() == SendStatus.SEND_OK) {
//            // 减库存
//            goodService.incGoodNumber(goodId, -1);
//        }
//        resultMap.put("msg", "秒杀成功");
//        return resultMap;
//    }
//
//
//    /** 获取秒杀的随机数 */
//    @PostMapping("/export/{id}")
//    @ResponseBody
//    public String export(@PathVariable Integer id) {
//        String randomStr = "123456";
//        redisService.setRandom(id, randomStr);
//        return randomStr;
//    }
//
//
//    /** 添加商品 */
//    @GetMapping("/save/{name}")
//    @ResponseBody
//    public String save(@PathVariable String name) {
//        GoodDetail goodDetail = new GoodDetail();
//        goodDetail.setName(name);
//        goodDetail.setCreateTime(new Date());
//        goodDetail.setEndTime(new Date());
//        goodDetail.setNumber(100);
//        goodDetail.setStartTime(new Date());
//        this.goodService.save(goodDetail);
//        return "添加成功";
//    }
//
//}
